Agency task: Agency decisions
Model: Agency decisions by VoC
## Mixed Model Anova Table (Type 3 tests, LRT-method)
##
## Model: stage_1_choice ~ voc_z * condition_trial * age_z + (voc_z * condition_trial ||
## Model: subject_id)
## Data: agency_model_data
## Df full model: 12
## Effect df Chisq p.value
## 1 voc_z 1 166.62 *** <.001
## 2 condition_trial 1 0.07 .796
## 3 age_z 1 0.00 .965
## 4 voc_z:condition_trial 1 51.94 *** <.001
## 5 voc_z:age_z 1 12.28 *** <.001
## 6 condition_trial:age_z 1 0.01 .941
## 7 voc_z:condition_trial:age_z 1 5.26 * .022
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula: stage_1_choice ~ voc_z * condition_trial * age_z + (1 + re1.voc_z +
## re1.condition_trial + re1.voc_z_by_condition_trial || subject_id)
## Data: data
## Control: glmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 1e+06))
##
## AIC BIC logLik deviance df.resid
## 38797.4 38902.4 -19386.7 38773.4 46747
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -37.884 -0.383 0.172 0.500 37.176
##
## Random effects:
## Groups Name Variance Std.Dev.
## subject_id (Intercept) 4.51651 2.1252
## subject_id.1 re1.voc_z 0.49713 0.7051
## subject_id.2 re1.condition_trial 0.82459 0.9081
## subject_id.3 re1.voc_z_by_condition_trial 0.04873 0.2207
## Number of obs: 46759, groups: subject_id, 150
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.262232 0.175381 7.197 6.15e-13 ***
## voc_z 1.094665 0.061065 17.926 < 2e-16 ***
## condition_trial -0.020084 0.077009 -0.261 0.794244
## age_z 0.007827 0.174968 0.045 0.964321
## voc_z:condition_trial 0.200551 0.025091 7.993 1.32e-15 ***
## voc_z:age_z 0.218518 0.061013 3.581 0.000342 ***
## condition_trial:age_z -0.005669 0.076840 -0.074 0.941189
## voc_z:condition_trial:age_z 0.058323 0.025115 2.322 0.020219 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) voc_z cndtn_ age_z vc_z:c_ vc_z:g_ cnd_:_
## voc_z 0.012
## conditn_trl 0.012 0.007
## age_z 0.000 0.001 -0.002
## vc_z:cndtn_ 0.006 0.043 0.034 0.001
## voc_z:age_z 0.002 -0.006 0.001 0.010 -0.001
## cndtn_trl:_ -0.002 0.001 -0.009 0.007 0.005 0.004
## vc_z:cnd_:_ 0.001 0.000 0.005 0.003 0.000 0.036 0.033
|
Predictor
|
Log-Odds
|
SE
|
Statistic
|
p
|
|
intercept
|
1.26
|
0.18
|
7.20
|
<0.001
|
|
VoC
|
1.09
|
0.06
|
17.93
|
<0.001
|
|
trial
|
-0.02
|
0.08
|
-0.26
|
0.794
|
|
age
|
0.01
|
0.17
|
0.04
|
0.964
|
|
VoC x trial
|
0.20
|
0.03
|
7.99
|
<0.001
|
|
VoC x age
|
0.22
|
0.06
|
3.58
|
<0.001
|
|
trial x age
|
-0.01
|
0.08
|
-0.07
|
0.941
|
|
VoC x trial x age
|
0.06
|
0.03
|
2.32
|
0.020
|
Plot: Sensitivity to the value of choice

Plot: Sensitivity to value of choice with continuous age


Summary stats: Sensitivity to value of control
Agency decision reaction times
Model: Agency RTs by VoC
## Mixed Model Anova Table (Type 3 tests, S-method)
##
## Model: agencyLogRT ~ zAge * zAbsVoC * zTrialOfCond + (zAbsVoC * zTrialOfCond |
## Model: subject_id)
## Data: banditTask.RT.data
## Effect df F p.value
## 1 zAge 1, 147.99 0.63 .427
## 2 zAbsVoC 1, 148.61 17.05 *** <.001
## 3 zTrialOfCond 1, 147.97 71.56 *** <.001
## 4 zAge:zAbsVoC 1, 148.39 4.43 * .037
## 5 zAge:zTrialOfCond 1, 147.97 0.09 .767
## 6 zAbsVoC:zTrialOfCond 1, 1560.95 0.21 .647
## 7 zAge:zAbsVoC:zTrialOfCond 1, 1562.56 0.61 .435
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula:
## agencyLogRT ~ zAge * zAbsVoC * zTrialOfCond + (zAbsVoC * zTrialOfCond |
## subject_id)
## Data: data
## Control: lmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 1e+06))
##
## REML criterion at convergence: 62132.1
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -5.3588 -0.6227 -0.0891 0.5275 5.7413
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## subject_id (Intercept) 1.213e-01 0.34823
## zAbsVoC 2.648e-04 0.01627 -0.29
## zTrialOfCond 1.790e-02 0.13379 0.05 0.00
## zAbsVoC:zTrialOfCond 2.798e-05 0.00529 -0.70 0.52 -0.67
## Residual 2.147e-01 0.46336
## Number of obs: 46759, groups: subject_id, 150
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) -4.785e-02 2.851e-02 1.480e+02 -1.678 0.0954 .
## zAge -2.269e-02 2.851e-02 1.480e+02 -0.796 0.4275
## zAbsVoC -1.041e-02 2.521e-03 1.486e+02 -4.130 6.04e-05 ***
## zTrialOfCond -9.417e-02 1.113e-02 1.480e+02 -8.459 2.39e-14 ***
## zAge:zAbsVoC -5.307e-03 2.520e-03 1.484e+02 -2.106 0.0369 *
## zAge:zTrialOfCond -3.300e-03 1.113e-02 1.480e+02 -0.297 0.7673
## zAbsVoC:zTrialOfCond -1.000e-03 2.187e-03 1.561e+03 -0.457 0.6475
## zAge:zAbsVoC:zTrialOfCond 1.709e-03 2.187e-03 1.563e+03 0.781 0.4346
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) zAge zAbsVC zTrlOC zAg:AVC zA:TOC zAVC:T
## zAge 0.004
## zAbsVoC -0.154 -0.001
## zTrialOfCnd 0.053 0.000 -0.001
## zAge:zAbsVC -0.001 -0.154 0.002 0.000
## zAg:zTrlOfC 0.000 0.053 0.000 0.004 -0.001
## zAbsVC:zTOC -0.138 0.000 0.055 -0.129 -0.001 0.000
## zAg:AVC:TOC 0.000 -0.138 -0.001 0.000 0.054 -0.129 -0.001
## optimizer (bobyqa) convergence code: 0 (OK)
## boundary (singular) fit: see help('isSingular')
|
Predictor
|
Estimates
|
SE
|
p
|
|
intercept
|
-0.05
|
0.03
|
0.093
|
|
age
|
-0.02
|
0.03
|
0.426
|
|
VoC magnitude
|
-0.01
|
0.00
|
<0.001
|
|
trial
|
-0.09
|
0.01
|
<0.001
|
|
age x VoC magnitude
|
-0.01
|
0.00
|
0.035
|
|
age x trial
|
-0.00
|
0.01
|
0.767
|
|
VoC magnitude x trial
|
-0.00
|
0.00
|
0.647
|
|
age x VoC magnitude x trial
|
0.00
|
0.00
|
0.435
|
Plot: Agency RTs by VoC

Agency task: Machine selection
Model: Optimal machine choices across trials by condition and
age
## Mixed Model Anova Table (Type 3 tests, LRT-method)
##
## Model: stage_2_acc ~ context * condition_trial * age_z + (context *
## Model: condition_trial || subject_id)
## Data: machine_model_data
## Df full model: 12
## Effect df Chisq p.value
## 1 context 1 29.27 *** <.001
## 2 condition_trial 1 69.50 *** <.001
## 3 age_z 1 15.49 *** <.001
## 4 context:condition_trial 1 5.47 * .019
## 5 context:age_z 1 0.74 .389
## 6 condition_trial:age_z 1 0.70 .404
## 7 context:condition_trial:age_z 1 1.71 .191
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula: stage_2_acc ~ context * condition_trial * age_z + (1 + re1.context1 +
## re1.condition_trial + re1.context1_by_condition_trial || subject_id)
## Data: data
## Control: glmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 1e+06))
##
## AIC BIC logLik deviance df.resid
## 15084.2 15179.9 -7530.1 15060.2 21318
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -10.7613 0.0972 0.2017 0.4001 2.4112
##
## Random effects:
## Groups Name Variance Std.Dev.
## subject_id (Intercept) 1.7634 1.3279
## subject_id.1 re1.context1 0.6000 0.7746
## subject_id.2 re1.condition_trial 0.2931 0.5414
## subject_id.3 re1.context1_by_condition_trial 0.1118 0.3344
## Number of obs: 21330, groups: subject_id, 149
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.31547 0.11532 20.078 < 2e-16 ***
## context1 0.40971 0.07119 5.755 8.65e-09 ***
## condition_trial 0.49629 0.05390 9.208 < 2e-16 ***
## age_z 0.45938 0.11421 4.022 5.77e-05 ***
## context1:condition_trial 0.09387 0.03923 2.393 0.0167 *
## context1:age_z -0.06268 0.07112 -0.881 0.3782
## condition_trial:age_z 0.04491 0.05342 0.841 0.4006
## context1:condition_trial:age_z -0.05214 0.03913 -1.333 0.1827
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) cntxt1 cndtn_ age_z cntxt1:c_ cntxt1:g_ cnd_:_
## context1 0.033
## conditn_trl 0.077 0.031
## age_z 0.038 0.004 0.011
## cntxt1:cnd_ 0.028 0.108 0.077 0.000
## contxt1:g_z 0.000 0.054 -0.003 0.023 0.014
## cndtn_trl:_ 0.007 -0.002 0.071 0.061 0.003 0.021
## cntxt1:c_:_ -0.003 0.014 0.004 0.017 0.106 0.106 0.066
|
Predictor
|
Log-Odds
|
SE
|
Statistic
|
p
|
|
intercept
|
2.32
|
0.12
|
20.08
|
<0.001
|
|
condition
|
0.41
|
0.07
|
5.76
|
<0.001
|
|
trial
|
0.50
|
0.05
|
9.21
|
<0.001
|
|
age
|
0.46
|
0.11
|
4.02
|
<0.001
|
|
condition x trial
|
0.09
|
0.04
|
2.39
|
0.017
|
|
condition x age
|
-0.06
|
0.07
|
-0.88
|
0.378
|
|
trial x age
|
0.04
|
0.05
|
0.84
|
0.401
|
|
condition x trial x age
|
-0.05
|
0.04
|
-1.33
|
0.183
|
Plot: Proportion optimal machine selections across age groups and
trials

Explicit reward knowledge task
Explicit reward knowledge task: summary stats
Model: Explicit reward knowledge by age and true probabilities
## Mixed Model Anova Table (Type 3 tests, S-method)
##
## Model: error ~ zTrueProb * zAge + (1 | subject_id)
## Data: explicitKnow.filtered
## Effect df F p.value
## 1 zTrueProb 1, 748.00 23.42 *** <.001
## 2 zAge 1, 148.00 7.59 ** .007
## 3 zTrueProb:zAge 1, 748.00 0.52 .473
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: error ~ zTrueProb * zAge + (1 | subject_id)
## Data: data
##
## REML criterion at convergence: 3093.5
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.5243 -0.7034 -0.1905 0.4417 4.1618
##
## Random effects:
## Groups Name Variance Std.Dev.
## subject_id (Intercept) 0.1159 0.3405
## Residual 1.6947 1.3018
## Number of obs: 900, groups: subject_id, 150
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 1.58778 0.05154 148.00000 30.810 < 2e-16 ***
## zTrueProb -0.21012 0.04342 747.99999 -4.840 1.58e-06 ***
## zAge -0.14204 0.05156 148.00000 -2.755 0.00661 **
## zTrueProb:zAge -0.03119 0.04344 747.99999 -0.718 0.47293
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) zTrPrb zAge
## zTrueProb 0.000
## zAge 0.000 0.000
## zTruPrb:zAg 0.000 0.000 0.000
Plot: Explicit reward knowledge

LS0tCnRpdGxlOiAiRTIgVm9DIEFuYWx5c2VzIFBhcnQgMjogUmVncmVzc2lvbiBBbmFseXNlcyIKZGF0ZTogMy8yNy8yNApvdXRwdXQ6CiAgICBodG1sX2RvY3VtZW50OgogICAgICAgIGRmX3ByaW50OiAncGFnZWQnCiAgICAgICAgdG9jOiB0cnVlCiAgICAgICAgdG9jX2Zsb2F0OgogICAgICAgICAgICBjb2xsYXBzZWQ6IGZhbHNlCiAgICAgICAgICAgIHNtb290aF9zY3JvbGw6IHRydWUKICAgICAgICBudW1iZXJfc2VjdGlvbnM6IGZhbHNlCiAgICAgICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgICAgIHNlbGZfY29udGFpbmVkOiB0cnVlCi0tLQoKYGBge3IgY2h1bmsgc2V0dGluZ3MsIGluY2x1ZGUgPSBGQUxTRX0KIyBzZXQgY2h1bmsgc2V0dGluZ3MKa25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgCiAgICAgICAgICAgICAgICAgICAgICBjYWNoZSA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nID0gRkFMU0UpCmtuaXRyOjpvcHRzX2NodW5rJHNldChkcGk9NjAwKQprbml0cjo6b3B0c19rbml0JHNldChyb290LmRpciA9IHJwcm9qcm9vdDo6ZmluZF9yc3R1ZGlvX3Jvb3RfZmlsZSgpKQpgYGAKCmBgYHtyIGxvYWQgbGlicmFyaWVzLCBpbmNsdWRlID0gRn0KCiNsb2FkIGxpYnJhcmllcwpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShnbHVlKQpsaWJyYXJ5KGFmZXgpCmxpYnJhcnkoc2pQbG90KQoKI2xvYWQgc2NyaXB0cwpzb3VyY2UoJ2FuYWx5c2lzX3NjcmlwdHMvdm9jX2Z1bmN0aW9ucy5SJykKYGBgCgpgYGB7ciBpbXBvcnQgZGF0YX0KCiMgcmVhZCBpbiBsZWFybmluZyBkYXRhCmxlYXJuaW5nX2RhdGEgPC0gcmVhZF9jc3YoJ2RhdGEvcHJvY2Vzc2VkL2xlYXJuaW5nX2RhdGEuY3N2JykKCiMgcmVhZCBpbiBwYXJ0aWNpcGFudCBhZ2VzCnBhcnRpY2lwYW50X2FnZXMgPC0gcmVhZF9jc3YoJ2RhdGEvdm9jX3N1Yl9pbmZvLmNzdicpIAoKIyBqb2luCmxlYXJuaW5nX2RhdGEgPC0gaW5uZXJfam9pbihsZWFybmluZ19kYXRhLCBwYXJ0aWNpcGFudF9hZ2VzLCBieSA9IGMoJ3N1YmplY3RfaWQnKSkgJT4lCiAgbXV0YXRlKGFnZV9ncm91cCA9IGNhc2Vfd2hlbihhZ2UgPCAxMyB+ICdDaGlsZHJlbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2UgPCAxOCAmIGFnZSA+IDEyLjk5IH4gJ0Fkb2xlc2NlbnRzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZSA+IDE4IH4gJ0FkdWx0cycpKQoKbGVhcm5pbmdfZGF0YSRhZ2VfZ3JvdXAgPC0gZmFjdG9yKGxlYXJuaW5nX2RhdGEkYWdlX2dyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiQ2hpbGRyZW4iLCAiQWRvbGVzY2VudHMiLCAiQWR1bHRzIikpCgpgYGAKCmBgYHtyIHByb2Nlc3MgbGVhcm5pbmcgZGF0YX0KbGVhcm5pbmdfZGF0YSA8LSBsZWFybmluZ19kYXRhICU+JQogIG11dGF0ZShldl9jaG9pY2UgPSBjYXNlX3doZW4oY29udGV4dCA9PSAwIH4gOSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPT0gMSB+IDcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID09IDIgfiA1KSwKICAgICAgICAgZXZfY29tcCA9IDUgKyBvZmZlciwKICAgICAgICAgdm9jID0gZXZfY2hvaWNlIC0gZXZfY29tcCwKICAgICAgICAgYmV0dGVyX21hY2hpbmUgPSBjYXNlX3doZW4ocmV3YXJkX3Byb2JfTCA+IHJld2FyZF9wcm9iX1IgfiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXdhcmRfcHJvYl9MIDwgcmV3YXJkX3Byb2JfUiB+IDAsCiAgICAgICAgICksCiAgICAgICAgIHN0YWdlXzJfYWNjID0gY2FzZV93aGVuKHN0YWdlXzJfY2hvaWNlID09IGJldHRlcl9tYWNoaW5lIH4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhZ2VfMl9jaG9pY2UgIT0gYmV0dGVyX21hY2hpbmUgfiAwKSkgJT4lCiAgZ3JvdXBfYnkoc3ViamVjdF9pZCwgY29udGV4dCkgJT4lCiAgbXV0YXRlKGNvbmRpdGlvbl90cmlhbCA9IHJhbmsodHJpYWwpLAogICAgICAgICBibG9jayA9IGZsb29yKCh0cmlhbC0xKS8yMSArIDEpKQoKIyBleGNsdWRlIGZpcnN0LXN0YWdlIG1pc3NlcyBhbmQgZmlyc3Qtc3RhZ2UgUlQgPCAxNTAgbXMKbGVhcm5pbmdfZGF0YV9maWx0ZXJlZCA8LSBsZWFybmluZ19kYXRhICU+JQogIGZpbHRlcihzdGFnZV8xX3J0ID4gMTUwKQoKYGBgCgojIFBhcnRpY2lwYW50IGluZm8KYGBge3Igc3ViamVjdCBpbmZvcm1hdGlvbn0Kc3ViX2luZm8gPC0gbGVhcm5pbmdfZGF0YV9maWx0ZXJlZCAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KHN1YmplY3RfaWQsIGFnZSwgYWdlX2dyb3VwLCBnZW5kZXIpICU+JQogIHVuaXF1ZSgpICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCkgJT4lCiAgc3VtbWFyaXplKE4gPSBuKCksIAogICAgICAgICAgICBtaW5fYWdlID0gbWluKGFnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWF4X2FnZSA9IG1heChhZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1lYW5fYWdlID0gbWVhbihhZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHNkX2FnZSA9IHNkKGFnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbl9mZW1hbGUgPSBzdW0oZ2VuZGVyID09ICdGZW1hbGUnKSwKICAgICAgICAgICAgbl9tYWxlID0gc3VtKGdlbmRlciA9PSAnTWFsZScpLAogICAgICAgICAgICBuX290aGVyID0gc3VtKGdlbmRlciA9PSAnT3RoZXInKSkKc3ViX2luZm8KCmBgYAoKCiMgQWdlbmN5IHRhc2s6IEFnZW5jeSBkZWNpc2lvbnMgCiMjIE1vZGVsOiBBZ2VuY3kgZGVjaXNpb25zIGJ5IFZvQwpgYGB7ciBhZ2VuY3kgbW9kZWx9CiMgc2VsZWN0IHJlbGV2YW50IHZhcmlhYmxlcyAKYWdlbmN5X21vZGVsX2RhdGEgPC0gbGVhcm5pbmdfZGF0YV9maWx0ZXJlZCAlPiUKICBzZWxlY3Qoc3ViamVjdF9pZCwgc3RhZ2VfMV9jaG9pY2UsIHZvYywgY29uZGl0aW9uX3RyaWFsLCBibG9jaywgdHJpYWwsIGFnZSwgYWdlX2dyb3VwKQoKIyMgUkVHUkVTU0lPTiBNT0RFTCAjIwojeiBzY29yZSBjb250aW51b3VzIHZhcmlhYmxlcwphZ2VuY3lfbW9kZWxfZGF0YSRzdWJqZWN0X2lkIDwtIGZhY3RvcihhZ2VuY3lfbW9kZWxfZGF0YSRzdWJqZWN0X2lkKQphZ2VuY3lfbW9kZWxfZGF0YSR2b2NfeiA8LSBzY2FsZV90aGlzKGFnZW5jeV9tb2RlbF9kYXRhJHZvYykKYWdlbmN5X21vZGVsX2RhdGEkY29uZGl0aW9uX3RyaWFsIDwtIHNjYWxlX3RoaXMoYWdlbmN5X21vZGVsX2RhdGEkY29uZGl0aW9uX3RyaWFsKQphZ2VuY3lfbW9kZWxfZGF0YSRhZ2VfeiA8LSBzY2FsZV90aGlzKGFnZW5jeV9tb2RlbF9kYXRhJGFnZSkKCiNydW4gbW9kZWwKYWdlbmN5X21vZGVsIDwtIG1peGVkKHN0YWdlXzFfY2hvaWNlIH4gIHZvY196ICogY29uZGl0aW9uX3RyaWFsICogYWdlX3ogKyAodm9jX3ogKiBjb25kaXRpb25fdHJpYWwgfHwgc3ViamVjdF9pZCksCiAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gYWdlbmN5X21vZGVsX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICBmYW1pbHkgPSAiYmlub21pYWwiLAogICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gIkxSVCIsCiAgICAgICAgICAgICAgICAgICAgICBleHBhbmRfcmUgPSBULAogICAgICAgICAgICAgICAgICAgICAgY29udHJvbD1nbG1lckNvbnRyb2wob3B0aW1pemVyPSJib2J5cWEiLCBvcHRDdHJsPWxpc3QobWF4ZnVuPTFlNikpKQoKI3Nob3cgbW9kZWwgcmVzdWx0cwphZ2VuY3lfbW9kZWwKc3VtbWFyeShhZ2VuY3lfbW9kZWwpCmBgYAoKCmBgYHtyIGFnZW5jeSBtb2RlbCBwcmludCBtb2RlbCBzdGF0c30KCmFnZW5jeV9tb2RlbC5nbG1lciA9ICBtaXhlZChzdGFnZV8xX2Nob2ljZSB+ICB2b2NfeiAqIGNvbmRpdGlvbl90cmlhbCAqIGFnZV96ICsgKHZvY196ICogY29uZGl0aW9uX3RyaWFsIHx8IHN1YmplY3RfaWQpLAogICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGFnZW5jeV9tb2RlbF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gImJpbm9taWFsIiwKICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJMUlQiLAogICAgICAgICAgICAgICAgICAgICAgZXhwYW5kX3JlID0gVCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9Z2xtZXJDb250cm9sKG9wdGltaXplcj0iYm9ieXFhIiwgb3B0Q3RybD1saXN0KG1heGZ1bj0xZTYpKSwKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA9ICJtZXJNb2QiKQoKdGFiX21vZGVsKGFnZW5jeV9tb2RlbC5nbG1lciwgCiAgICAgICAgICBwcmVkLmxhYmVscyA9IGMoImludGVyY2VwdCIsICJWb0MiLCAidHJpYWwiLCAiYWdlIiwgIlZvQyB4IHRyaWFsIiwgIlZvQyB4IGFnZSIsICJ0cmlhbCB4IGFnZSIsICJWb0MgeCB0cmlhbCB4IGFnZSIpLAogICAgICAgICAgdHJhbnNmb3JtID0gTlVMTCwKICAgICAgICAgIHNob3cuZXN0ID0gVCwgCiAgICAgICAgICBzaG93LnNlID0gVCwgCiAgICAgICAgICBzaG93LnN0YXQgPSBULAogICAgICAgICAgc2hvdy5jaSA9IEYsCiAgICAgICAgICBzaG93LnJlLnZhciA9IEYsCiAgICAgICAgICBzaG93LmljYyA9IEYsCiAgICAgICAgICBzaG93Lm5ncm91cHMgPSBGLAogICAgICAgICAgc2hvdy5vYnMgPSBGLAogICAgICAgICAgc2hvdy5yMiA9IEYsCiAgICAgICAgICBzdHJpbmcuc2UgPSAiU0UiLAogICAgICAgICAgZW1waC5wID0gRiwKICAgICAgICAgIHN0cmluZy5wcmVkID0gIlByZWRpY3RvciIsCiAgICAgICAgICB0aXRsZSA9ICIiLAogICAgICAgICAgZHYubGFiZWxzID0gIiIpCmBgYAoKIyMgUGxvdDogU2Vuc2l0aXZpdHkgdG8gdGhlIHZhbHVlIG9mIGNob2ljZQpgYGB7ciB2b2MgcGxvdCwgZmlnLmhlaWdodCA9IDQsIGZpZy53aWR0aCA9IDcsIHVuaXQgPSAiaW4ifQojIyBQTE9UICMjCmFnZW5jeV9zdWJfbWVhbnMgPC0gYWdlbmN5X21vZGVsX2RhdGEgJT4lIAogIG11dGF0ZSh0YXNrX2hhbGYgPSBjYXNlX3doZW4odHJpYWwgPCAxNTggfiAiRmlyc3QgSGFsZiBvZiBUYXNrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpYWwgPiAxNTcgfiAiU2Vjb25kIEhhbGYgb2YgVGFzayIpKSAlPiUKICBncm91cF9ieSh0YXNrX2hhbGYsIHZvYywgc3ViamVjdF9pZCwgYWdlX2dyb3VwKSAlPiUKICBzdW1tYXJpemUobWVhbl9zdWJfYWdlbmN5ID0gbWVhbihzdGFnZV8xX2Nob2ljZSwgbmEucm0gPSBUKSkKCmFnZW5jeV9tZWFucyA8LSBhZ2VuY3lfc3ViX21lYW5zICU+JSAKICBncm91cF9ieSh0YXNrX2hhbGYsIHZvYywgYWdlX2dyb3VwKSAlPiUKICBzdW1tYXJpemUobWVhbl9hZ2VuY3kgPSBtZWFuKG1lYW5fc3ViX2FnZW5jeSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgc2VfYWdlbmN5ID0gc2QobWVhbl9zdWJfYWdlbmN5IC8gc3FydChuKCkpKSkKCmFnZW5jeV9wbG90IDwtIGdncGxvdChhZ2VuY3lfbWVhbnMsIGFlcyh4ID0gdm9jLCB5ID0gbWVhbl9hZ2VuY3ksIGNvbG9yID0gYWdlX2dyb3VwKSkgKwogIGZhY2V0X3dyYXAofnRhc2tfaGFsZikgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gYWdlX2dyb3VwKSkgKyAKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gbWVhbl9hZ2VuY3kgLSBzZV9hZ2VuY3ksIHltYXggPSBtZWFuX2FnZW5jeSArIHNlX2FnZW5jeSksIHdpZHRoID0gLjEpICsgCiAgZ2VvbV9saW5lKCkgKwogIHZvY190aGVtZSgpICsgCiAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoIiM3MDI5NjMiLCAiI2MwMDAwMCIsICIjZmZhZTQyIiksIG5hbWUgPSAiQWdlIEdyb3VwIikgKwogIHhsYWIoIlZhbHVlIG9mIENob2ljZSAoVm9DKSIpICsKICB5bGFiKCJQcm9wb3J0aW9uIEFnZW5jeSBDaG9pY2VzIikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC41LCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMCwgbGluZXR5cGUgPSAiZGFzaGVkIikKYWdlbmN5X3Bsb3QKYGBgCgoKIyMgUGxvdDogU2Vuc2l0aXZpdHkgdG8gdmFsdWUgb2YgY2hvaWNlIHdpdGggY29udGludW91cyBhZ2UgCmBgYHtyIHZvYyBwbG90IGNvbnRpbnVvdXMgYWdlLCBmaWcuaGVpZ2h0ID0gMy45LCBmaWcud2lkdGggPSAzLCB1bml0ID0gImluIn0KCiNydW4gbW9kZWwgd2l0aG91dCBhZ2UgdG8gZ2V0IHJhbmRvbSBlZmZlY3RzIGZvciBlYWNoIHBhcnRpY2lwYW50CmFnZW5jeV9nbG1lciA8LSBtaXhlZChzdGFnZV8xX2Nob2ljZSB+ICB2b2NfeiAqIGNvbmRpdGlvbl90cmlhbCArICh2b2NfeiAqIGNvbmRpdGlvbl90cmlhbCB8IHN1YmplY3RfaWQpLAogICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGFnZW5jeV9tb2RlbF9kYXRhLCAKICAgICAgICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsLCAKICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJMUlQiLAogICAgICAgICAgICAgICAgICAgICAgY29udHJvbD1nbG1lckNvbnRyb2wob3B0aW1pemVyPSJib2J5cWEiLG9wdEN0cmw9bGlzdChtYXhmdW49MWU2KSksCiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPSAibWVyTW9kIikgCgojZ2V0IGZpeGVkIGVmZmVjdCBvZiB6Vm9DClZvQ19maXhlZGVmZiA8LSBhcy5kYXRhLmZyYW1lKGNvZWYoc3VtbWFyeShhZ2VuY3lfZ2xtZXIpKSkkRXN0aW1hdGVbMl0KVm9DX2ludF9maXhlZGVmZiA8LSBhcy5kYXRhLmZyYW1lKGNvZWYoc3VtbWFyeShhZ2VuY3lfZ2xtZXIpKSkkRXN0aW1hdGVbNF0KCiNnZXQgcmFuZG9tIGVmZmVjdHMKVm9DX2VmZmVjdHMgPC0gcmFuZWYoYWdlbmN5X2dsbWVyKSRzdWJqZWN0X2lkICU+JQogICAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzdWJqZWN0X2lkIikKCiNjb21iaW5lIHdpdGggYWdlClZvQ19zdWJFZmZlY3RzIDwtIGFnZW5jeV9tb2RlbF9kYXRhICU+JQogICAgc2VsZWN0KHN1YmplY3RfaWQsIGFnZSkgJT4lIAogICAgdW5pcXVlKCkgJT4lCiAgICBsZWZ0X2pvaW4oVm9DX2VmZmVjdHMsIGJ5ID0gYygic3ViamVjdF9pZCIpKSAlPiUKICAgIG11dGF0ZSh6Vm9DRnVsbCA9IHZvY196ICsgVm9DX2ZpeGVkZWZmLCAKICAgICAgICAgICBpbnRGdWxsID0gYHZvY196OmNvbmRpdGlvbl90cmlhbGAgKyBWb0NfaW50X2ZpeGVkZWZmKQoKI3Bsb3QgYWdlIGJ5IFZvQyBlZmZlY3QKVm9DX3Bsb3RfY29udGludW91c0FnZSA8LSBnZ3Bsb3QoVm9DX3N1YkVmZmVjdHMsIGFlcyh4ID0gYWdlLCB5ID0gelZvQ0Z1bGwpKSArCiAgICBnZW9tX3BvaW50KGNvbG9yID0gImJsYWNrIikgKyAKICAgIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgZmlsbCA9ICJibGFjayIpICsKICAgIHZvY190aGVtZSgpICsgCiAgICB4bGFiKCJBZ2UiKSArCiAgICB5bGFiKCJWb0MgRWZmZWN0IikgClZvQ19wbG90X2NvbnRpbnVvdXNBZ2UKCiNwbG90IGFnZSBieSBWb0MgeCB0cmlhbCBlZmZlY3QKVm9DX3Bsb3RfY29udGludW91c0FnZVRyaWFsIDwtIGdncGxvdChWb0Nfc3ViRWZmZWN0cywgYWVzKHggPSBhZ2UsIHkgPSBpbnRGdWxsKSkgKwogICAgZ2VvbV9wb2ludChjb2xvciA9ICJibGFjayIpICsgCiAgICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGZpbGwgPSAiYmxhY2siKSArCiAgICB2b2NfdGhlbWUoKSArIAogICAgeGxhYigiQWdlIikgKwogICAgeWxhYigiVm9DIHggVHJpYWwgRWZmZWN0IikgClZvQ19wbG90X2NvbnRpbnVvdXNBZ2VUcmlhbApgYGAKCgoKIyMgU3VtbWFyeSBzdGF0czogU2Vuc2l0aXZpdHkgdG8gdmFsdWUgb2YgY29udHJvbApgYGB7ciB2b2Mgc3VtbWFyeSBzdGF0c30KCiMgV2hhdCBwcm9wb3J0aW9uIG9mIHRyaWFscyBkaWQgcGFydGljaXBhbnRzIGNob29zZSBhZ2VuY3kgd2hlbiBWb0Mgd2FzIDA/ClZvQ196ZXJvX21lYW5zX3N1YiA8LSBsZWFybmluZ19kYXRhX2ZpbHRlcmVkICU+JSAKICAgIGZpbHRlcih2b2MgPT0gMCkgJT4lCiAgICBncm91cF9ieShzdWJqZWN0X2lkLCBhZ2VfZ3JvdXApICU+JQogICAgc3VtbWFyaXplKG1lYW5TdWJBZ2VuY3kgPSBtZWFuKHN0YWdlXzFfY2hvaWNlLCBuYS5ybSA9IFQpKQoKVm9DX3plcm9fbWVhbnMgPC0gVm9DX3plcm9fbWVhbnNfc3ViICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzdW1tYXJpemUobWVhbkFnZW5jeSA9IG1lYW4obWVhblN1YkFnZW5jeSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICBzZUFnZW5jeSA9IHNkKG1lYW5TdWJBZ2VuY3kgLyBzcXJ0KG4oKSkpKQpWb0NfemVyb19tZWFucwpgYGAKCgojIyBBZ2VuY3kgZGVjaXNpb24gcmVhY3Rpb24gdGltZXMKYGBge3IgYWdlbmN5IFJUIGRhdGEgcHJvY2Vzc2luZ30KCiNjb21wdXRlIFJUCmxlYXJuaW5nX2RhdGFfZmlsdGVyZWQkYWdlbmN5UlQgPC0gbGVhcm5pbmdfZGF0YV9maWx0ZXJlZCRzdGFnZV8xX3J0IC8gMTAwMAoKI2hvdyBtYW55IFJUcyBmYXN0ZXIgdGhhbiAxMDAgbXM/CmZhc3RSVHMgPC0gbGVhcm5pbmdfZGF0YV9maWx0ZXJlZCAlPiUKICAgIGZpbHRlcihhZ2VuY3lSVCA8IC4xKSAlPiUKICAgIG5yb3coKQoKIzAgZXhjbHVkZWQKCnNsb3dSVHMgPC0gbGVhcm5pbmdfZGF0YV9maWx0ZXJlZCAlPiUKICAgIGZpbHRlcihhZ2VuY3lSVCA+IDMwKSAlPiUKICAgIG5yb3coKQoKIzAgZXhjbHVkZWQKCmJhbmRpdFRhc2suUlQuZGF0YSA8LSBsZWFybmluZ19kYXRhX2ZpbHRlcmVkICU+JQogICAgZmlsdGVyKGFnZW5jeVJUID4gLjEpICU+JQogICAgZmlsdGVyKGFnZW5jeVJUIDwgMzApICU+JQogICAgbXV0YXRlKGFnZW5jeUxvZ1JUID0gbG9nKGFnZW5jeVJUKSkKYGBgCgojIyBNb2RlbDogQWdlbmN5IFJUcyBieSBWb0MKYGBge3Igdm9jIFJUIG1vZGVsfQoKI2NvbXB1dGUgYWJzKHZvYykgdmFyaWFibGUKYmFuZGl0VGFzay5SVC5kYXRhJGFic1ZvQyA8LSBhYnMoYmFuZGl0VGFzay5SVC5kYXRhJHZvYykKCiNzY2FsZSB2YXJpYWJsZXMKYmFuZGl0VGFzay5SVC5kYXRhJHpBZ2UgPC0gc2NhbGUoYmFuZGl0VGFzay5SVC5kYXRhJGFnZSkKYmFuZGl0VGFzay5SVC5kYXRhJHpWb0MgPC0gc2NhbGUoYmFuZGl0VGFzay5SVC5kYXRhJHZvYykKYmFuZGl0VGFzay5SVC5kYXRhJHpBYnNWb0MgPC0gc2NhbGUoYmFuZGl0VGFzay5SVC5kYXRhJGFic1ZvQykKYmFuZGl0VGFzay5SVC5kYXRhJHpUcmlhbE9mQ29uZCA8LSBzY2FsZShiYW5kaXRUYXNrLlJULmRhdGEkY29uZGl0aW9uX3RyaWFsKQoKYWdlbmN5LlJULm1vZGVsIDwtIG1peGVkKGFnZW5jeUxvZ1JUIH4gekFnZSAqIHpBYnNWb0MgKiB6VHJpYWxPZkNvbmQgKyAoekFic1ZvQyAqIHpUcmlhbE9mQ29uZCB8IHN1YmplY3RfaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGJhbmRpdFRhc2suUlQuZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJTIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sPWxtZXJDb250cm9sKG9wdGltaXplcj0iYm9ieXFhIiwgb3B0Q3RybD1saXN0KG1heGZ1bj0xZTYpKSkKCmFnZW5jeS5SVC5tb2RlbApzdW1tYXJ5KGFnZW5jeS5SVC5tb2RlbCkKCiNlZmZlY3RzIG9mCiMgYWdlCiMgVm9DCiMgdHJpYWwgb2YgY29uZGl0aW9uCgojbm8gaW50ZXJhY3Rpb25zCmBgYAoKCmBgYHtyIGFnZW5jeSBSVHMgbW9kZWwgcHJpbnQgbW9kZWwgc3RhdHN9CgphZ2VuY3kuUlQubG1lciA8LSBtaXhlZChhZ2VuY3lMb2dSVCB+IHpBZ2UgKiB6QWJzVm9DICogelRyaWFsT2ZDb25kICsgKHpBYnNWb0MgKiB6VHJpYWxPZkNvbmQgfCBzdWJqZWN0X2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBiYW5kaXRUYXNrLlJULmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAiUyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbD1sbWVyQ29udHJvbChvcHRpbWl6ZXI9ImJvYnlxYSIsIG9wdEN0cmw9bGlzdChtYXhmdW49MWU2KSksCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPSAibWVyTW9kIikKCnRhYl9tb2RlbChhZ2VuY3kuUlQubG1lciwgCiAgICAgICAgICBwcmVkLmxhYmVscyA9IGMoImludGVyY2VwdCIsICJhZ2UiLCAiVm9DIG1hZ25pdHVkZSIsICJ0cmlhbCIsICJhZ2UgeCBWb0MgbWFnbml0dWRlIiwgImFnZSB4IHRyaWFsIiwgIlZvQyBtYWduaXR1ZGUgeCB0cmlhbCIsICJhZ2UgeCBWb0MgbWFnbml0dWRlIHggdHJpYWwiKSwKICAgICAgICAgIHRyYW5zZm9ybSA9IE5VTEwsCiAgICAgICAgICBzaG93LmVzdCA9IFQsIAogICAgICAgICAgc2hvdy5zZSA9IFQsIAogICAgICAgICAgc2hvdy5mc3RhdCA9IFQsCiAgICAgICAgICBzaG93LmNpID0gRiwKICAgICAgICAgIHNob3cucmUudmFyID0gRiwKICAgICAgICAgIHNob3cuaWNjID0gRiwKICAgICAgICAgIHNob3cubmdyb3VwcyA9IEYsCiAgICAgICAgICBzaG93Lm9icyA9IEYsCiAgICAgICAgICBzaG93LnIyID0gRiwKICAgICAgICAgIHN0cmluZy5zZSA9ICJTRSIsCiAgICAgICAgICBlbXBoLnAgPSBGLAogICAgICAgICAgc3RyaW5nLnByZWQgPSAiUHJlZGljdG9yIiwKICAgICAgICAgIHRpdGxlID0gIiIsCiAgICAgICAgICBkdi5sYWJlbHMgPSAiIikKYGBgCgojIyBQbG90OiBBZ2VuY3kgUlRzIGJ5IFZvQwpgYGB7ciBhZ2VuY3kgUlQgYnkgVm9DLCBmaWcuaGVpZ2h0ID0gNCwgZmlnLndpZHRoID0gOCwgdW5pdHMgPSAiaW4ifQoKYWdlbmN5UlQubWVhbnMuc3ViIDwtIGJhbmRpdFRhc2suUlQuZGF0YSAlPiUKICAgIGdyb3VwX2J5KHZvYywgYWdlX2dyb3VwLCBzdWJqZWN0X2lkKSAlPiUKICAgIHN1bW1hcml6ZShtZWFuU3ViUlQgPSBtZWFuKGFnZW5jeVJUKSwKICAgICAgICAgICAgICBtZWFuU3ViTG9nUlQgPSBtZWFuKGFnZW5jeUxvZ1JUKSkKCiNjb21wdXRlIG1lYW5zIGFuZCBTRHMKYWdlbmN5UlQubWVhbnMgPC0gYWdlbmN5UlQubWVhbnMuc3ViICAlPiUKICAgIGdyb3VwX2J5KHZvYywgYWdlX2dyb3VwKSAlPiUKICAgIHN1bW1hcml6ZShtZWFuUlQgPSBtZWFuKG1lYW5TdWJSVCksCiAgICAgICAgICAgICAgbWVhbkxvZ1JUID0gbWVhbihtZWFuU3ViTG9nUlQpLAogICAgICAgICAgICAgIHNlUlQgPSBzZChtZWFuU3ViUlQpLyBzcXJ0KG4oKSksCiAgICAgICAgICAgICAgc2VMb2dSVCA9IHNkKG1lYW5TdWJMb2dSVCkvIHNxcnQobigpKSkKCmFnZW5jeVJULlZvQy5wbG90IDwtIGdncGxvdChhZ2VuY3lSVC5tZWFucywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXMoeCA9IHZvYywgeSA9IG1lYW5SVCkpICsKICAgIGZhY2V0X3dyYXAofmFnZV9ncm91cCkgKwogICAgZ2VvbV9wb2ludChzaXplID0gMywgYWVzKGNvbG9yPSBhZ2VfZ3JvdXApKSArCiAgICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gbWVhblJUIC0gc2VSVCwgeW1heCA9IG1lYW5SVCArIHNlUlQsIGNvbG9yID0gYWdlX2dyb3VwKSwgd2lkdGggPSAuMSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IC45KSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoY29sb3IxLCBjb2xvcjIsIGNvbG9yMykpICsKICAgIHhsYWIoIlZhbHVlIG9mIENob2ljZSIpICsKICAgICB5bGFiKCJNZWFuIEFnZW5jeSBEZWNpc2lvbiBUaW1lIChzKSIpICsKICAgIHZvY190aGVtZSgpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKYWdlbmN5UlQuVm9DLnBsb3QKYGBgCgojIEFnZW5jeSB0YXNrOiBNYWNoaW5lIHNlbGVjdGlvbgojIyBNb2RlbDogT3B0aW1hbCBtYWNoaW5lIGNob2ljZXMgYWNyb3NzIHRyaWFscyBieSBjb25kaXRpb24gYW5kIGFnZQpgYGB7ciBtYWNoaW5lIHNlbGVjdGlvbiBkZWNpc2lvbnN9CiMgc2VsZWN0IHZhcmlhYmxlcyBmb3IgaW5jbHVzaW9uIGluIG1peGVkLWVmZmVjdHMgbW9kZWwgKG5vIGFnZSBmb3Igbm93KQptYWNoaW5lX21vZGVsX2RhdGEgPC0gbGVhcm5pbmdfZGF0YV9maWx0ZXJlZCAlPiUKICBmaWx0ZXIoc3RhZ2VfMV9jaG9pY2UgPT0gMSkgJT4lCiAgZmlsdGVyKGNvbnRleHQgPCAyKSAlPiUKICBzZWxlY3Qoc3ViamVjdF9pZCwgc3RhZ2VfMl9hY2MsIGNvbnRleHQsIGNvbmRpdGlvbl90cmlhbCwgYmxvY2ssIGFnZSwgYWdlX2dyb3VwKSAlPiUKICBkcm9wX25hKCkKCiMjIFJFR1JFU1NJT04gTU9ERUwgIyMKI3ogc2NvcmUgY29udGludW91cyB2YXJpYWJsZXMKbWFjaGluZV9tb2RlbF9kYXRhJHN1YmplY3RfaWQgPC0gZmFjdG9yKG1hY2hpbmVfbW9kZWxfZGF0YSRzdWJqZWN0X2lkKQptYWNoaW5lX21vZGVsX2RhdGEkY29udGV4dCA8LSBmYWN0b3IobWFjaGluZV9tb2RlbF9kYXRhJGNvbnRleHQpCm1hY2hpbmVfbW9kZWxfZGF0YSRjb25kaXRpb25fdHJpYWwgPC0gc2NhbGVfdGhpcyhtYWNoaW5lX21vZGVsX2RhdGEkY29uZGl0aW9uX3RyaWFsKQptYWNoaW5lX21vZGVsX2RhdGEkYWdlX3ogPC0gc2NhbGVfdGhpcyhtYWNoaW5lX21vZGVsX2RhdGEkYWdlKQoKI3J1biBtb2RlbAptYWNoaW5lX21vZGVsIDwtIG1peGVkKHN0YWdlXzJfYWNjIH4gIGNvbnRleHQgKiBjb25kaXRpb25fdHJpYWwgKiBhZ2VfeiArIChjb250ZXh0ICogY29uZGl0aW9uX3RyaWFsIHx8IHN1YmplY3RfaWQpLAogICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG1hY2hpbmVfbW9kZWxfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgIGZhbWlseSA9ICJiaW5vbWlhbCIsCiAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAiTFJUIiwKICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZF9yZSA9IFQsCiAgICAgICAgICAgICAgICAgICAgICBjb250cm9sPWdsbWVyQ29udHJvbChvcHRpbWl6ZXI9ImJvYnlxYSIsIG9wdEN0cmw9bGlzdChtYXhmdW49MWU2KSkpCgojc2hvdyBtb2RlbCByZXN1bHRzCm1hY2hpbmVfbW9kZWwKc3VtbWFyeShtYWNoaW5lX21vZGVsKQpgYGAKCgpgYGB7ciBtYWNoaW5lIG1vZGVsIHByaW50IG1vZGVsIHN0YXRzfQoKbWFjaGluZV9tb2RlbC5nbG1lciA8LSBtaXhlZChzdGFnZV8yX2FjYyB+IGNvbnRleHQgKiBjb25kaXRpb25fdHJpYWwgKiBhZ2VfeiArIChjb250ZXh0ICogY29uZGl0aW9uX3RyaWFsIHx8IHN1YmplY3RfaWQpLAogICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG1hY2hpbmVfbW9kZWxfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgIGZhbWlseSA9ICJiaW5vbWlhbCIsCiAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAiTFJUIiwKICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZF9yZSA9IFQsCiAgICAgICAgICAgICAgICAgICAgICBjb250cm9sPWdsbWVyQ29udHJvbChvcHRpbWl6ZXI9ImJvYnlxYSIsIG9wdEN0cmw9bGlzdChtYXhmdW49MWU2KSksCiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPSAibWVyTW9kIikKCnRhYl9tb2RlbChtYWNoaW5lX21vZGVsLmdsbWVyLCAKICAgICAgICAgIHByZWQubGFiZWxzID0gYygiaW50ZXJjZXB0IiwgImNvbmRpdGlvbiIsICJ0cmlhbCIsICJhZ2UiLCAiY29uZGl0aW9uIHggdHJpYWwiLCAiY29uZGl0aW9uIHggYWdlIiwgInRyaWFsIHggYWdlIiwgImNvbmRpdGlvbiB4IHRyaWFsIHggYWdlIiksCiAgICAgICAgICB0cmFuc2Zvcm0gPSBOVUxMLAogICAgICAgICAgc2hvdy5lc3QgPSBULCAKICAgICAgICAgIHNob3cuc2UgPSBULCAKICAgICAgICAgIHNob3cuc3RhdCA9IFQsCiAgICAgICAgICBzaG93LmNpID0gRiwKICAgICAgICAgIHNob3cucmUudmFyID0gRiwKICAgICAgICAgIHNob3cuaWNjID0gRiwKICAgICAgICAgIHNob3cubmdyb3VwcyA9IEYsCiAgICAgICAgICBzaG93Lm9icyA9IEYsCiAgICAgICAgICBzaG93LnIyID0gRiwKICAgICAgICAgIHN0cmluZy5zZSA9ICJTRSIsCiAgICAgICAgICBlbXBoLnAgPSBGLAogICAgICAgICAgc3RyaW5nLnByZWQgPSAiUHJlZGljdG9yIiwKICAgICAgICAgIHRpdGxlID0gIiIsCiAgICAgICAgICBkdi5sYWJlbHMgPSAiIikKYGBgCgojIyBQbG90OiBQcm9wb3J0aW9uIG9wdGltYWwgbWFjaGluZSBzZWxlY3Rpb25zIGFjcm9zcyBhZ2UgZ3JvdXBzIGFuZCB0cmlhbHMKYGBge3IgcGxvdCBiYW5kaXQgY2hvaWNlcyBhY3Jvc3MgdHJpYWxzLCB3aWR0aCA9IDcsIGhlaWdodCA9IDQsIHVuaXQgPSAiaW4ifQoKIyMgUExPVCAjIwptYWNoaW5lX3NlbGVjdGlvbl9zdWJfbWVhbnMgPC0gbWFjaGluZV9tb2RlbF9kYXRhICU+JQogIGdyb3VwX2J5KGNvbnRleHQsIGJsb2NrLCBzdWJqZWN0X2lkLCBhZ2VfZ3JvdXApICU+JSAKICBzdW1tYXJpemUoc3ViX2FjYyA9IG1lYW4oc3RhZ2VfMl9hY2MsIG5hLnJtID0gVCkpCgptYWNoaW5lX3NlbGVjdGlvbl9tZWFucyA8LSBtYWNoaW5lX3NlbGVjdGlvbl9zdWJfbWVhbnMgJT4lCiAgZ3JvdXBfYnkoY29udGV4dCwgYmxvY2ssIGFnZV9ncm91cCkgJT4lIAogIHN1bW1hcml6ZShtZWFuX2FjYyA9IG1lYW4oc3ViX2FjYyksCiAgICAgICAgICAgIHNlID0gc2Qoc3ViX2FjYykvc3FydChuKCkpKQoKbWFjaGluZV9zZWxlY3Rpb25fcGxvdCA8LSBnZ3Bsb3QobWFjaGluZV9zZWxlY3Rpb25fbWVhbnMsIGFlcyh4PWJsb2NrLCB5PW1lYW5fYWNjLCBjb2xvcj1mYWN0b3IoY29udGV4dCkpKSArCiAgZmFjZXRfd3JhcCh+YWdlX2dyb3VwKSArCiAgZ2VvbV9wb2ludChzaXplID0gMykgKwogIGdlb21faml0dGVyKGRhdGEgPSBtYWNoaW5lX3NlbGVjdGlvbl9zdWJfbWVhbnMsICBhZXMoeD1ibG9jaywgeT1zdWJfYWNjLCBjb2xvcj1mYWN0b3IoY29udGV4dCkpLCBzaXplID0gLjUpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBhZXMoZmlsbCA9IGZhY3Rvcihjb250ZXh0KSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAuNSwgbGluZXR5cGU9ImRhc2hlZCIpICsKICB5bGFiKCJQcm9wb3J0aW9uIE9wdGltYWwgTWFjaGluZSBTZWxlY3Rpb25zIikgKwogIHhsYWIoIkJsb2NrIikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDQsIDgsIDEyKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKG5hbWU9IkNvbnRleHQiLAogICAgICAgICAgICAgICAgICAgIGxhYmVscz1jKCI5MC8xMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjcwLzMwIiksCiAgICAgICAgICAgICAgICAgICAgdmFsdWVzPWMoY29sb3IxLCBjb2xvcjMpLCAKICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlPVRSVUUpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKG5hbWU9IkNvbnRleHQiLAogICAgICAgICAgICAgICAgICAgICBsYWJlbHM9YygiOTAvMTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNzAvMzAiKSwKICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPWMoY29sb3IxLCBjb2xvcjMpLAogICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlPVRSVUUpKSArCiAgdm9jX3RoZW1lKCkgKwogIHRoZW1lKHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZT0xMikpCm1hY2hpbmVfc2VsZWN0aW9uX3Bsb3QKYGBgCgoKCgojIEV4cGxpY2l0IHJld2FyZCBrbm93bGVkZ2UgdGFzayAKIyMgRXhwbGljaXQgcmV3YXJkIGtub3dsZWRnZSB0YXNrOiBzdW1tYXJ5IHN0YXRzCmBgYHtyIGV4cGxpY2l0IGtub3dsZWRnZSB0YXNrfQoKIyBSZWFkIGluIGRhdGEKZXhwbGljaXRLbm93IDwtIHJlYWRfY3N2KCdkYXRhL3Byb2Nlc3NlZC9leHBsaWNpdF9kYXRhLmNzdicpIAojZXhwbGljaXRLbm93JHN1YmplY3RfaWQgPC0gZmFjdG9yKGV4cGxpY2l0S25vdyRzdWJqZWN0X2lkKQoKI2NvbWJpbmUgd2l0aCBhZ2UKZXhwbGljaXRLbm93IDwtIGZ1bGxfam9pbihleHBsaWNpdEtub3csIHBhcnRpY2lwYW50X2FnZXMsIGJ5ID0gYygic3ViamVjdF9pZCIpKQoKZXhwbGljaXRLbm93ICU+JSAKICBncm91cF9ieShzdWJqZWN0X2lkLCBhZ2UpICU+JSAKICBzdW1tYXJpemUobSA9IG1lYW4oZXJyb3IpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzdW1tYXJpemUobWVhbkVyciA9IG1lYW4obSwgbmEucm09VCksIHNkID0gc2QobSwgbmEucm0gPSBUKSkKYGBgCgojIyBNb2RlbDogRXhwbGljaXQgcmV3YXJkIGtub3dsZWRnZSBieSBhZ2UgYW5kIHRydWUgcHJvYmFiaWxpdGllcwpgYGB7ciBleHBsaWNpdCBrbm93bGVkZ2UgbW9kZWx9CgojcmUtc2NhbGUgYWdlIGFuZCB6VHJ1ZVByb2IKZXhwbGljaXRLbm93LmZpbHRlcmVkIDwtIGV4cGxpY2l0S25vdyAlPiUKICAgIHNlbGVjdChzdWJqZWN0X2lkLCBhZ2UsIHRydWVfcHJvYiwgZXJyb3IpICU+JQogICAgZHJvcF9uYSgpCgpleHBsaWNpdEtub3cuZmlsdGVyZWQkekFnZSA8LSBzY2FsZShleHBsaWNpdEtub3cuZmlsdGVyZWQkYWdlKQpleHBsaWNpdEtub3cuZmlsdGVyZWQkelRydWVQcm9iIDwtIHNjYWxlKGV4cGxpY2l0S25vdy5maWx0ZXJlZCR0cnVlX3Byb2IpCgojIHJ1biBtb2RlbApleHBsaWNpdEtub3dfZXJyb3JieVRydWVQcm9iQWdlLm1peGVkIDwtIG1peGVkKGVycm9yIH4gelRydWVQcm9iKnpBZ2UgKyAoMXxzdWJqZWN0X2lkKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGV4cGxpY2l0S25vdy5maWx0ZXJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAiUyIpIApleHBsaWNpdEtub3dfZXJyb3JieVRydWVQcm9iQWdlLm1peGVkCnN1bW1hcnkoZXhwbGljaXRLbm93X2Vycm9yYnlUcnVlUHJvYkFnZS5taXhlZCkKYGBgCgojIyBQbG90OiBFeHBsaWNpdCByZXdhcmQga25vd2xlZGdlCmBgYHtyIHBsb3QgZXhwbGljaXQga25vd2xlZGdlfQoKZXhwbGljaXRLbm93IDwtIGV4cGxpY2l0S25vdyAlPiUKICBtdXRhdGUoYWdlX2dyb3VwID0gY2FzZV93aGVuKGFnZSA8IDEzIH4gJ0NoaWxkcmVuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZSA8IDE4ICYgYWdlID4gMTIuOTkgfiAnQWRvbGVzY2VudHMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlID4gMTggfiAnQWR1bHRzJykpCgpleHBsaWNpdEtub3ckYWdlX2dyb3VwIDwtIGZhY3RvcihleHBsaWNpdEtub3ckYWdlX2dyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiQ2hpbGRyZW4iLCAiQWRvbGVzY2VudHMiLCAiQWR1bHRzIikpCgojIHBsb3QgcmVzcG9uc2UgYnkgYmFuZGl0CmV4cGxpY2l0S25vdyAlPiUgZHJvcF9uYSgpICU+JQogICAgZ2dwbG90KC4sIGFlcyh4PWZhY3Rvcih0cnVlX3Byb2IpLCB5PXJlc3BvbnNlLCBmaWxsPWFnZV9ncm91cCkpICsKICAgIGdlb21fYm94cGxvdCgpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoY29sb3IxLCBjb2xvcjIsIGNvbG9yMyksIG5hbWUgPSAiQWdlIEdyb3VwIikgKwogICAgeWxhYigiUmVwb3J0ZWQgUmV3YXJkIFByb2JhYmlsaXR5IikgKwogICAgeGxhYigiVHJ1ZSBSZXdhcmQgUHJvYmFiaWxpdHkiKSArCiAgICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscyA9IGMoIjEwJSIsICIzMCUiLCAiNTAlIiwgIjcwJSIsICI5MCUiKSkgKwogICAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IGMoMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiMTAlIiwgIjIwJSIsICIzMCUiLCAiNDAlIiwgIjUwJSIsICI2MCUiLCAiNzAlIiwgIjgwJSIsICI5MCUiLCAiMTAwJSIpKSArCiAgICB2b2NfdGhlbWUoKQpgYGAK